//
// Created by DengLibin on 2018/12/13 0013.
//
/**
容器 vector:动态数组

1、resize(n)

调整容器的长度大小，使其能容纳n个元素。

如果n小于容器的当前的size，则删除多出来的元素。

否则，添加采用值初始化的元素。

2、 resize(n，t)

多一个参数t，将所有新添加的元素初始化为t。

而reserver()的用法只有一种

reserve(n)

预分配n个元素的存储空间。
*/
#include <iostream>
#include <string>
#include <vector>
using namespace std;

void testVector()
{
    vector<int> v(0);
    v.push_back(2);
    v.push_back(3);
    v.push_back(4);
    cout << "vector长度:" << v.size() << endl;
    //遍历
    while (v.size()>0)
    {
        cout << v.back() << ",";//获取尾部元素
        v.pop_back();//移除尾部元素
    }
    cout << endl;
    //font()函数取首部元素,返回的是该元素的引用,所以可以直接修改元素的值
    v.push_back(23);
    v.push_back(34);
    v.front() = 12;//改变元素的值
    cout << v.front() << endl;
}
//vector的初始化
void initVector()
{
    vector<int> v1;
    v1.push_back(1);
    v1.push_back(2);
    v1.push_back(3);
    vector<int> v2 = v1;
    vector<int> v3(3,0);//3个0
    for (int i = 0; i < v3.size(); i++)
    {
        cout << v3[i] << " ";
    }
}
//vector的遍历
void showVector()
{
    vector<int > v;
    v.push_back(1);
    v.push_back(1);
    v.push_back(1);
    cout << "vector size:" << v.size() << endl;
    cout << "show arr:";
    for (int i = 0; i < v.size(); i++)
    {
        cout << v[i] << ",";
    }
    cout << endl;

    cout << "iterator:";
    for (vector<int >::const_iterator it = v.begin(); it != v.end(); it++)
    {
        cout << *it << ",";
    }
    //v.front() = 34;//改变元素的值,传的是引用，实参本身会被修改

}
//堆内存
void heapVector()
{
    vector<int> *pv = new vector<int>(10);
    cout << "size:" << pv->size() << endl;
    for (int i = 0; i < pv->size(); i++)
    {
        (*pv)[i] = i;
    }
    delete(pv);
}
//删除元素
void deleteVectorElement()
{
    vector<int> * v1 = new vector<int>(10,0);//10个0
    //showVector<int>(*v1);
    for (int i = 0; i < v1->size(); i++)
    {
        v1->at(i) = i;
    }
    v1->erase(v1->begin(), v1->begin() + 3);//区间删除(删除前3个元素)
    v1->erase(v1->begin());//删除头部
    //根据元素值删除
    for (vector<int> ::iterator it = v1->begin(); it != v1->end();)
    {
        if (*it == 2)
        {
            it = v1->erase(it);//删除时，返回下一个元素的指针(让迭代器指向下一个元素)
        }
        else
        {
            it++;
        }
    }

    delete v1;
}
//插入元素
void insertVectorElement()
{
    vector<double> *v = new vector<double>(10,0.01);
    v->insert(v->begin(), 20);
    v->insert(v->end(), 80);
    (*v)[1] = 2;
}
int main22()
{
    //initVector();
    showVector();
    return 0;
}